The Microsoft® .NET framework is a new platform for building integrated, service-oriented, applications to, meet the needs of today's and future Internet businesses. The .Net platform allows developers to take better advantage of technologies than any earlier Microsoft platform. Specifically, the .NET platform provides for code reuse, code specialization, resource management, multi-language development, security, deployment and administration.
A .NET application can be executed on any platform that supports the .NET common language runtime (CLR). It is further possible that a version of the CLR be built for platforms other than Windows. The .Net platform allows different programming languages to be integrated with one another. For example, it is possible to create a class in C++ that is derived from a class implemented in Visual Basic. The programming languages supported by the .Net platform includes, but are not limited to, C++ with managed extensions, C#, Visual Basic, Pascal, Cobol, Java, JScript, and many others. However, the source code written in these languages requires the CLR engine in order to execute.
Reference is now made to FIG. 1, which is a prior art illustration of a progression of a .Net application through execution by a CLR engine 140. Once, the .Net source code 110 has been written in one of the programming languages mentioned above, it is first run through .Net compiler 120. .Net compiler 120 comprises a plurality of compilers, each targeted to a different language supported by the .Net platform. .Net compiler 120 generates the Microsoft intermediate language (MSIL) instructions. The MSIL instructions are arranged in assembly files 130. The MSIL includes instructions that create and initialize objects, call virtual methods on objects, raise and catch exceptions for error handling and manipulate array elements directly. The MSIL is central processing unit (CPU) independent, and as a result the MSIL instructions cannot be executed directly on a host CPU. Hence, CLR engine 140 must first compile the MSIL instructions into native CPU instructions. Generally, in order to ensure good performance, CLR engine 140 compiles the MSIL instructions as functions that are then called for execution.
Recently, the Java programming environment has gained popularity. The Java programming language is designed to be portable enough to be executed on a wide range of computers, ranging from small devices, e.g., PDA's, cell phones, and smart cards, up to supercomputers. Computer programs written in the Java programming language are compiled into Java bytecode instructions that are suitable for execution by a Java virtual machine (JVM).
FIG. 2 is a prior art illustration of the progression of a Java application through execution by a JVM. Java source code 210 includes a class with its associated methods written in Java. Source code 210 is then input into Java bytecode compiler 220, that compiles the source code into Java bytecodes. Java compiler 220 outputs Java class files 230 that include the bytecodes for the Java program. The Java bytecodes are virtual machine instructions that are executed by an interpreter. Typically, virtual machine instructions are generic, namely they are not designed for any specific CPU or computer architecture. The Java class file is then input into JVM 240. JVM 240 is an interpreter that decodes and executes the bytecodes of the Java class file. A conventional virtual machine's interpreter decodes and executes the Java bytecode instructions, one instruction at a time, during execution, i.e., at runtime.
It should be noted that both MSIL and Java bytecodes are stack based object-oriented languages. Stack-based languages require an efficient stack representation, fast procedure calls, and fast compilation.
It should be emphasized that Java applications can be executed either on a CLR engine or on a JVM, while .Net applications can be executed only on a CLR engine. Therefore, applications designed with the .Net platform cannot execute on a JVM. As a result, programmers cannot integrate the advantages inherent to .Net with the capabilities provided by the Java runtime environment. For example, a large number of Web applications are written in the Visual Basic programming language, however, executing those applications in a Java environment is impossible in the currently available technology.
Stack-based developments are known in the art, such as U.S. Pat. No. 5,668,999, System and Method for Pre-Verification of Stack Usage in Bytecode Program Loops, by Gosling, which features a virtual stack for temporarily storing stack information. U.S. Pat. No. 6,205,577, Interpreter for Stack-Based Languages, by Grove provides a multi-state interpreter for a stack-based programming language.
A bytecode interpreter was disclosed in U.S. Pat. No. 5,740,441, Bytecode Program Interpreter Apparatus and Method with Pre-Verification of Data Type Restrictions and Object Initialization, by Yellin, et al.
Recent compiler developments in the art include: U.S. Pat. No. 5,768,593, Dynamic Cross-Compilation System and Method, by Walters, et al;
U.S. Pat. No. 6,295,642, Method and Apparatus for Partial Just in Time Compiling in a Data Processing System, by Blandy;
U.S. Pat. No. 6,484,313, Compiling and Persisting of Intermediate Language Code, by Trowbridge, et al; and
U.S. Pat. No. 6,327,1702, Generating a Compiled Language Program for an Interpretive Runtime Environment, by Sauntry, et al.
However, none of the above patents relate to a Java bytecode platform.
Therefore, there is a need for a method that overcomes the limitations of prior art by providing a compiler that decodes the MSIL instructions and produces Java bytecodes instructions.